好幾天沒寫文了,但其實每天都有上去看題(例如昨天的螞蟻相撞),也都有在跟朋友討論。
這幾天有很多可以用外鄉人作法來處理的題目,感覺是蠻有趣的。
給一個長度的array,裡面有各種數字,要取前兩個比大小,贏的人留下來,輸的丟到數組的最後面,返回先贏了k次的數字
這題雖然是中等,但感覺其實沒有那麼難。也許是因為這幾天都是抖機靈的題目,我直接就開始想要怎麼跳過那些數組替換的步驟。
於是我就在想,如果輸了一次,就代表他不可能贏,所以我只需要跑過一整個數組,看誰會在前面贏到指定次數。也就是說,除了第一個數之外,後面的都是去檢查後面k-1個數是否比他大。
class Solution:
def getWinner(self, arr: List[int], k: int) -> int:
current_winner = arr[0]
win_count = 0
for i in range(1, len(arr)):
if arr[i] > current_winner:
current_winner = arr[i]
win_count = 1
else:
win_count += 1
if win_count == k:
return current_winner
# 如果我们已经比较了足够多的次数,超过了数组长度,那么当前的最大元素是无敌的
if i - win_count > len(arr):
break
return current_winner
我根本不管把數字刪除跟丟到後面的部分,直接開始比。反正win-count都是從一開始,就直接看什麼時候新數字可以到目標k這樣。